package com.gl.buscaminas;

import com.gl.buscaminas.excepciones.BuscaminasOperacionInvalidaException;
import com.gl.buscaminas.excepciones.BuscaminasParametroNuloException;
import com.gl.buscaminas.excepciones.MensajesException;

/**
 * 
 * @author Omar Moreno 04/03/2012
 *
 */
public class BuscaminasJuego {

	private Tablero tablero;
	
	/** 
	 * @param filas
	 * @param columnas
	 * @throws BuscaminasParametroNuloException
	 */
	public void crearTablero(Integer filas, Integer columnas) throws BuscaminasParametroNuloException {
		if (filas == null || columnas == null) {
			throw new BuscaminasParametroNuloException(
					(filas == null) ? MensajesException.MJE_PARAMETRO_FILA_NULO
							: MensajesException.MJE_PARAMETRO_COLUMNA_NULO);
		}
		this.tablero = new Tablero(filas, columnas);
	}

	/**
	 * @param fila
	 * @param columna
	 * @throws BuscaminasOperacionInvalidaException
	 * @throws BuscaminasParametroNuloExceptionvoidBuscaminasJuego
	 */
	public void ponerBomba(Integer fila, Integer columna) throws BuscaminasOperacionInvalidaException, BuscaminasParametroNuloException {
		if (this.tablero == null) {
			throw new BuscaminasOperacionInvalidaException(
					MensajesException.MJE_CREAR_TABLERO);
		}
		if (fila == null || columna == null) {
			throw new BuscaminasParametroNuloException(
					(fila == null) ? MensajesException.MJE_PARAMETRO_FILA_NULO
							: MensajesException.MJE_PARAMETRO_COLUMNA_NULO);
		}
		this.tablero.ponerBomba(fila, columna);
	}

	/**
	 * @throws BuscaminasOperacionInvalidaExceptionvoidBuscaminasJuego
	 */
	public void comenzarJuego() throws BuscaminasOperacionInvalidaException {
		if (this.tablero == null) {
			throw new BuscaminasOperacionInvalidaException(
					MensajesException.MJE_CREAR_TABLERO);
		}
		this.tablero.inicializarTablero();
	}

	/**
	 * @param fila
	 * @param columna
	 * @throws BuscaminasOperacionInvalidaExceptionvoidBuscaminasJuego
	 */
	public void destapar(Integer fila, Integer columna) throws BuscaminasOperacionInvalidaException {
		if (this.tablero == null) {
			throw new BuscaminasOperacionInvalidaException(
					MensajesException.MJE_CREAR_TABLERO);
		} else if (this.tablero.obtenerEstadoJuego().equals(
				EstadosJuego.NO_INICIADO)) {
			throw new BuscaminasOperacionInvalidaException(
					MensajesException.MJE_COMENZAR_JUEGO);
		}
		this.tablero.destapar(fila, columna);
	}

	/**
	 * @return String
	 * @throws BuscaminasOperacionInvalidaExceptionStringBuscaminasJuego
	 */
	public String obtenerEstadoTablero() throws BuscaminasOperacionInvalidaException {
		if (this.tablero == null) {
			throw new BuscaminasOperacionInvalidaException(
					MensajesException.MJE_CREAR_TABLERO);
		}
		return this.tablero.obtenerEstadoTablero();
	}

	/**
	 * @return String
	 * @throws BuscaminasOperacionInvalidaExceptionStringBuscaminasJuego
	 */
	public String obtenerEstadoJuego() throws BuscaminasOperacionInvalidaException {
		if (this.tablero == null) {
			throw new BuscaminasOperacionInvalidaException(
					MensajesException.MJE_CREAR_TABLERO);
		}
		return this.tablero.obtenerEstadoJuego();
	}

}
